#ifndef CIRCULAR_BUFFER_H
#define CIRCULAR_BUFFER_H

#include <stdbool.h>
#include <stddef.h>
#include <pthread.h>
#include <stdint.h>

typedef struct {
    uint8_t *data;          // 缓冲区指针
    size_t capacity;        // 缓冲区总容量
    size_t head;            // 写指针（生产者）
    size_t tail;            // 读指针（消费者）
    pthread_mutex_t mutex;  // 互斥锁
    pthread_cond_t cond;    // 条件变量（用于阻塞读取）
} CircularBuffer;

// 初始化缓冲区（需指定容量）
bool circular_buffer_init(CircularBuffer *buf, size_t capacity);

// 销毁缓冲区（释放资源）
void circular_buffer_free(CircularBuffer *buf);

// 写入数据（线程安全，非阻塞）
bool circular_buffer_write(CircularBuffer *buf, const uint8_t *data, size_t len);

// 读取数据（线程安全，阻塞直到有数据）
size_t circular_buffer_read(CircularBuffer *buf, uint8_t *out, size_t max_len);

// 获取当前可读数据量（线程安全）
size_t circular_buffer_available(CircularBuffer *buf);

// 清空缓冲区（线程安全）
void circular_buffer_clear(CircularBuffer *buf);

#endif // CIRCULAR_BUFFER_H